package jsu.ljy.lostandfind.service;

import java.util.List;

import jsu.ljy.lostandfind.model.ClaimInfo;

/**
 * 认领信息服务接口
 * 
 * <p>定义了认领信息相关的业务逻辑操作接口，包括认领申请的提交、处理、查询等功能。</p>
 * 
 * @author 罗嘉毅
 * @version 1.0
 * @since 2024-03-21
 */
public interface ClaimInfoService {
    /**
     * 保存认领信息
     * 
     * @param claimInfo 认领信息
     * @throws IllegalArgumentException 当认领信息不完整时抛出
     */
    void save(ClaimInfo claimInfo);

    /**
     * 更新认领信息
     * 
     * @param claimInfo 更新的认领信息
     * @throws IllegalArgumentException 当认领信息ID为空或不存在时抛出
     */
    void update(ClaimInfo claimInfo);

    /**
     * 删除认领信息
     * 
     * @param id 认领信息ID
     * @throws IllegalArgumentException 当ID为空或认领信息不存在时抛出
     */
    void delete(Long id);

    /**
     * 根据ID查询认领信息
     * 
     * @param id 认领信息ID
     * @return 认领信息，不存在时返回null
     * @throws IllegalArgumentException 当ID为空时抛出
     */
    ClaimInfo getClaimInfoById(Long id);

    /**
     * 根据物品ID查询认领信息列表
     * 
     * @param itemId 物品ID
     * @return 认领信息列表
     * @throws IllegalArgumentException 当物品ID为空时抛出
     */
    List<ClaimInfo> getClaimInfosByItemId(Long itemId);

    /**
     * 根据用户ID查询认领信息列表
     * 
     * @param userId 用户ID
     * @return 认领信息列表
     * @throws IllegalArgumentException 当用户ID为空时抛出
     */
    List<ClaimInfo> getClaimInfosByUserId(Long userId);

    /**
     * 处理认领申请
     * 
     * @param id 认领信息ID
     * @param status 处理状态（APPROVED-通过，REJECTED-拒绝）
     * @throws IllegalArgumentException 当ID为空或状态无效时抛出
     */
    void handleClaim(Long id, String status);
} 